/**
 * @brief 更加直观查看tiny—macro-os的内容
*/

/* 更新系统时间，该函数应该放入定时器中断函数中处理，或者软件定时器中也可 */
#define OS_UPDATE_TIMERS()              do{                                                     \
                                            unsigned char i;                                    \
                                            for(i=0U;i<(TINY_MACRO_OS_TASKS_MAX_NUM);i++)       \
                                            {                                                   \
                                                if(OS_TIMERS[i]!=0U)                            \
                                                {                                               \
                                                    if(OS_TIMERS[i]!=(TINY_MACRO_OS_TIME_MAX))  \
                                                    {                                           \
                                                        OS_TIMERS[i]--;                         \
                                                    }                                           \
                                                }                                               \
                                            }                                                   \
                                        } while(0)

/* 调度开始之前，初始化所有任务，每个任务接下来都会被执行 */
#define OS_INIT_TASKS()                 do{                                                     \
                                            unsigned char i;                                    \
                                            for(i=0U;i<(TINY_MACRO_OS_TASKS_MAX_NUM);i++)       \
                                            {                                                   \
                                                OS_TIMERS[i]=0U;                                \
                                                OS_LINES[i]=0U;                                 \
                                            }                                                   \
                                        }while(0)

/* 函数任务系统调度开始定义 */
#define OS_TASK_START(NAME)             enum{_task_name=NAME};                                  \
                                        switch(OS_LINES[(NAME)])                                \
                                        {                                                       \
                                            default:                                            \

/* 函数任务系统调度结束定义 */
#define OS_TASK_END(NAME)                   break;                                              \
                                        }                                                       \
                                        OS_LINES[(NAME)]=0U;                                    \
                                        return (TINY_MACRO_OS_TIME_MAX)

/* 退出当前任务，并等待对应时间，保存当前运行位置，时间单位为中断里定义的系统最小时间。 */ /*此行不能换行，仅仅是方便查看*/
#define OS_TASK_WAITX(TICKS)            do{                                                                                             \
                                            OS_LINES[(_task_name)]=(((TINY_MACRO_OS_LINE_t)(__LINE__)%(TINY_MACRO_OS_LINE_MAX))+1U);    \
                                            return(TICKS);                                                                              \
                                            case (((TINY_MACRO_OS_LINE_t)(__LINE__)%(TINY_MACRO_OS_LINE_MAX))+1U):;                     \
                                        }while(0)

/* 跳出当前任务，保存当前运行位置，等下一次执行时继续运行 */
#define OS_TASK_YIELD()                 OS_TASK_WAITX(0)